<?php

/**
 * Base project form.
 * 
 * @package    sistema_estadisticas
 * @subpackage form
 * @author     Your name here 
 * @version    SVN: $Id: BaseForm.class.php 20147 2009-07-13 11:46:57Z FabianLange $
 */
class BaseForm extends sfFormSymfony
{

	public function setupAnexoForm()
	{
		if (isset($this->widgetSchema['anexo_id']))
		{
			unset($this['anexo_id']);
			$form = new AnexoForm($this->getObject()->getAnexo());  //los detalles se embeben en AnexoForm
			$this->embedForm('anexo', $form);
			$this->widgetSchema->moveField('anexo', sfWidgetFormSchema::LAST);
		}
	}

	public static function embedAddOnDetailForm($name, $index, $anexo_id)
	{
		$form = new sfForm();
		$form->widgetSchema->setNameFormat($name . '[%s]');
		$anexoForm = new AnexoForm();
		$name = '';
		
		if ($anexo_id)
		{
			$detalle = new AnexoDetalle();
			$detalle->setAnexoId($anexo_id);
			$name = $anexoForm->embedDetail($index, $detalle);
		}
		else
			$name = $anexoForm->embedDetail($index);

		$form->embedForm('anexo', $anexoForm);

		return $form['anexo'][$name];
	}
	
	protected function updateAddOnForm($taintedValues)
	{
		if (isset($taintedValues['anexo']))
		{
			$form = $this->getEmbeddedForm('anexo');
		
			foreach ($taintedValues['anexo'] as $key => $values)
			{
				if (!isset($form[$key]))
					$form->embedDetail(substr($key, -1));
			}
		
			$this->embedForm('anexo', $form);
		}
	}

	protected function doSaveAddOnForm($con)
	{
		$form = $this->getEmbeddedForm('anexo');
		$form->getObject()->save($con);

		$embedForms = $form->getEmbeddedForms();

		foreach ($embedForms as $name => $anexoForm)
		{
			$detalle = $anexoForm->getObject();
			
			if ($detalle->getArchivo() == null)
			{
				if ($this->values['anexo'][$name]['archivo_delete'] === 'on')
					$anexoForm->getObject()->delete($con);
			}
			else
			{
				if ($this->values['anexo'][$name]['archivo'] != null)
					$detalle->setNombre($this->values['anexo'][$name]['archivo']->getOriginalName());
				$detalle->setAnexoId($form->getObject()->getId());
				$detalle->save($con);
			}
		}

		$this->getObject()->setAnexoId($form->getObject()->getId());
	}
	
	public function isMultipart()
	{
		if (isset($this->widgetSchema['anexo'])) //necesario
			return true;
		
		return parent::isMultipart();
	}

}
